package ihm;


import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListSelectionModel;
import javax.swing.border.Border;
import javax.swing.border.EtchedBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

/**
 * Classe ThreadActualiseAmis
 *
 */
public class ThreadActualiseAmis extends Thread
{
	private FenetrePrincipale fen;	
	private String amisC[]; 
	private String amisD[]; 
	private String liste[];
	private JList listeC;
	private JList listeD;
	private JList listeMessage;
	private int i;
	private String amiSel;
	Color c2=new Color(215, 0,70,85);
	private ThreadActualiseAmis th;
	private JButton message;
	
	/** Constructeur **/
	public ThreadActualiseAmis(FenetrePrincipale _fen) 
	{
		fen=_fen;
	}
	
	/** Methode run()**/
	public void run()
	{
		//on initialise le tableau ami
		amisC=new String[fen.comCl.getAmis().size()];
		th=this;
		i=0;
		String stat=" ",pseudo=" ";
		while(fen.comCl.getAmis().size()>i){
			amisC[i]=fen.comCl.getAmis().get(i);
			i++;
		}
		amisD=new String[fen.comCl.getAmisDeco().size()];
		i=0;
		while(fen.comCl.getAmisDeco().size()>i){
			amisD[i]=fen.comCl.getAmisDeco().get(i);
			i++;
		}
		//on crée la liste et on l'ajoute au panneau
		listeC= new JList(amisC);//liste des connectés
		listeD=new JList(amisD);//liste des déconnectés
		listeMessage=new JList();
		liste=new String[fen.comCl.getMessages().size()];
		for(int i=0;i<fen.comCl.getMessages().size();i++){
			liste[i]=fen.comCl.getMessages().get(i).getEmail_expediteur()+ 
			"-"+ fen.comCl.getMessages().get(i).getDate() +"-"+
			fen.comCl.getMessages().get(i).getMessage();
		}
		listeMessage.setVisible(false);
		listeMessage.setListData(liste);
		JPanel pannMessage=new JPanel();
		message=new JButton();
		pannMessage.setLayout(new BorderLayout());
		pannMessage.add(message,BorderLayout.NORTH);
		pannMessage.add(listeMessage,BorderLayout.SOUTH);
		pannMessage.setBackground(Color.gray);
		//panneau contenant les deux listes
		JPanel p =new JPanel();
		JPanel pCentre=new JPanel();
		p.setBackground(Color.gray);
		p.setLayout(new BorderLayout());
		pCentre.setLayout(new BorderLayout());
		pCentre.setBackground(Color.gray);
		pCentre.add(listeC,BorderLayout.NORTH);
		pCentre.add(listeD,BorderLayout.SOUTH);
		p.add(pCentre,BorderLayout.NORTH);
		p.add(pannMessage,BorderLayout.PAGE_END);

		Border etc = BorderFactory.createEtchedBorder(EtchedBorder.RAISED, Color.RED, Color.BLACK);
		fen.pannA.add(p,BorderLayout.CENTER);
		listeC.setLocation(100, 100);
		Font f=new Font("Sans Serif", Font.BOLD, 14);

		if(fen.comCl.getMessages().size()==0)
			message.setText("Vous n'avez aucun message");
		else{
			message.setText("Vous avez "+fen.comCl.getMessages().size()+ " nouveaux messages");
			message.setBackground(Color.red);
			message.addActionListener(new ActionListener() {				
				@Override
				public void actionPerformed(ActionEvent arg0) {
					listeMessage.setVisible(true);
					listeMessage.addListSelectionListener(new ListSelectionListener() {						
						@Override
						public void valueChanged(ListSelectionEvent e) {
							String messSel;String[]message;
							if(e.getValueIsAdjusting() && liste.length!=0){
								messSel=(String)((JList)e.getSource()).getSelectedValue();
								if(messSel!=null){
									message=messSel.split("-");
									new FenetreAffichageMessage(message[0],fen.comCl,message[2],th);
								}
							}							
						}
					});
				}
			});
		}

		
		
		//parametre des listes des amis
		listeC.setFont(f);
		listeC.setSelectionBackground(Color.gray);
		listeC.setFixedCellHeight(30);
		listeC.setFixedCellWidth(400);
		listeD.setBackground(Color.pink);
		listeD.setFixedCellHeight(30);
		listeD.setFixedCellWidth(400);
		listeC.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		listeC.addListSelectionListener(new ListSelectionListener() {			
			@Override
			public void valueChanged(ListSelectionEvent e) {
				if(e.getValueIsAdjusting() && amisC.length!=0){
					amiSel=(String)((JList)e.getSource()).getSelectedValue();
					if(amiSel!=null)
					{
						ThreadConversation th=new ThreadConversation(amiSel,fen.comCl);
						th.start();//nouvelle
						//Conversation conv=new Conversation(amiSel);//ancienne
					}
				}
			}
		});


		listeD.addListSelectionListener(new ListSelectionListener() {
			
			@Override
			public void valueChanged(ListSelectionEvent e) {
				if(e.getValueIsAdjusting() && amisD.length!=0){
					amiSel=(String)((JList)e.getSource()).getSelectedValue();
					if(amiSel!=null)
					{
						new FenetreMessage(amiSel,fen.comCl);
					}
				}
				
			}
		});

		/**
		 * On actualise sans cesse la fenetre principale en chargeant les tableaux d'amis de Communication Client
		 * qui sont mis à jour à chaque connexion, changement de statut, de pseudo d'un nouvel utilisateur
		 */
		while(true)
		{
			//on met à jour le tableau et on réaffiche la liste			
			amisC=new String[fen.comCl.getAmis().size()];
			amisD=new String[fen.comCl.getAmisDeco().size()];
			pseudo=" ";
			Border tit = BorderFactory.createTitledBorder(etc, "Liste d'amis connectés"+"("+amisC.length+")");
			listeC.setBorder(tit);
			Border tit2 = BorderFactory.createTitledBorder(etc, "Liste d'amis déconnectés"+"("+amisD.length+")");
			listeD.setBorder(tit2);
			if(amisC.length!=0){
				listeC.setEnabled(true);
				i=0;
				while(fen.comCl.getAmis().size()>i)
				{
					if(amisC.length==fen.comCl.getAmis().size()){
					stat=fen.comCl.getStatuts().get(fen.comCl.getAmis().get(i));
					pseudo=fen.comCl.getPseudos().get(fen.comCl.getAmis().get(i));
					amisC[i]=fen.comCl.getAmis().get(i)+" ("+stat+")"+ " -" +pseudo;
					}
					i++;
					
				}
				listeC.setListData(amisC);
				listeC.repaint();
			}
			else{
				amisC=new String[]{"Aucun de vos amis n'est connecté"};
				listeC.setEnabled(false);
				listeC.setListData(amisC);
				listeC.repaint();
			}
			if(amisD.length!=0){
				listeD.setEnabled(true);
				i=0;
				while(fen.comCl.getAmisDeco().size()>i)
				{
					if(amisD.length==fen.comCl.getAmisDeco().size()){
					amisD[i]=fen.comCl.getAmisDeco().get(i);
					}
					i++;					
				}
				listeD.setListData(amisD);
				listeD.repaint();
			}
			else{
				amisD=new String[]{"Tous vos amis sont connectés"};
				listeD.setEnabled(false);
				listeD.setListData(amisD);
				listeD.repaint();
			}
		}
	}//fin run()
	

	public void reafficheListe(){
		liste=new String[fen.comCl.getMessages().size()];
		for(int i=0;i<fen.comCl.getMessages().size();i++){
			liste[i]=fen.comCl.getMessages().get(i).getEmail_expediteur()+"-"
			+fen.comCl.getMessages().get(i).getDate()+"-"+fen.comCl.getMessages().get(i).getMessage();
			}
		listeMessage.setListData(liste);
		listeMessage.repaint();
		if(fen.comCl.getMessages().size()==0){
			message.setText("Vous n'avez aucun message");
			message.setBackground(Color.gray);}
		else{
			message.setText("Vous avez "+fen.comCl.getMessages().size()+ " nouveaux messages");
			message.setBackground(Color.red);
		}
	}
}//fin Classe ThreadActualiseAmis
